/**
 * @Title: FastDFSUtil.java 
 * @Prject: p2p-person
 * @Package: com.lc.web.fastdfs 
 * @Description: 
 * @author: CJNusan
 * @date: 2017年11月8日 下午10:01:21 
 * @version: V1.0   
 */
package com.company.project.config.file.fastdfs;

import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

/** 
 * @Description: 完成从DFS服务器文件上传和下载的工具包
 * @author: CJNusan
 * @date: 2018年09月01日 下午10:01:21
 */
public class FastDFSUtil {

	/** 
	 * @Description: 文件上传到fastdfs服务器
	 * @date: 2017年11月8日 下午10:04:44 
	 */
	public static String upload(MultipartFile file)
	        throws IOException, MyException {
	
	    // 获取文件后缀名 
	    String ext = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
	    FastDFSFile fast = new FastDFSFile(file.getBytes(),ext);
	    NameValuePair[] meta_list = new NameValuePair[4];
	    meta_list[0] = new NameValuePair("fileName", file.getOriginalFilename());
	    meta_list[1] = new NameValuePair("fileLength", String.valueOf(file.getSize()));
	    meta_list[2] = new NameValuePair("fileExt", ext);
	    meta_list[3] = new NameValuePair("fileAuthor", FastDFSFile.FILE_DEFAULT_AUTHOR);
	    String filePath = FileManager.upload(fast,meta_list);
	    return filePath;
	}
	
	
	/** 
	 * @param filePath
	 * @return: download<byte[]>
	 * @Description: 下载文件需要用到组名和文件名
	 * @date: 2017年11月8日 下午10:12:06 
	 */
	public static ResponseEntity<byte[]> download(String filePath) throws IOException, MyException {
	    String substr = filePath.substring(filePath.indexOf("group"));
	    String group = substr.split("/")[0];
	    String remoteFileName = substr.substring(substr.indexOf("/")+1);
	    //下载后定义文件的名字 我们这里用UUID来生成
	    String specFileName = UUID.randomUUID() + substr.substring(substr.indexOf("."));
	    return FileManager.download(group, remoteFileName,specFileName);
	}
}
